package npr;

/** This is the superclass for all Shadow algorithms */
public abstract class Shadow extends Algorithm{

    /**
     * Creates a Shdow object. Shadow is not to be instantiated directly.
     */
    public Shadow(){}

    /**
     * Controls the size of the shadow, relative to the original, 
     * such that increased inflation gives the effect of a shadow emanating
     * from a larger (smaller for negative values, deflation) version of the shadow-casting object.
     */
    protected float inflation;

    /** 
     * Is the intensity of the shadow region when fully occluded
     * (or the effect of indirect illumination).
     */
    protected float brightness;

    /**
     * Indicates the width of the transition region from fully
     * occluded to fully visible, simulating the effect of an area light.
     */
    protected float softness;

    /**
     * Is a measure of shadow's accuracy; lower values
     * yield more detailed, accurate shadows, whereas larger values
     * produce rounder, simplified shadows.
     */
    protected float abstraction;


    /**
     * currently not implemented
     */

    public void setInflation(float inflation){
	this.inflation= inflation;
    }


    /**
     * Sets the intensity of the shadow, that is, simulates the effect of an ambient light.
     *
     * @param brightness intensity of the shadow. Accepted values are 0.0 to 1.0.
     */

    public void setBrightness(float brightness){
	this.brightness= brightness;
    }

    /**
     * currently not implemented
     */
    public void setSoftness(float softness){
	this.softness= softness;
    }


    /**
     * currently not implemented
     */
    public void setAbstraction(float abstraction){
	this.abstraction= abstraction;
    }
}
